package com.ts.service.achievement.impl;

import com.ts.dto.PageDTO;
import com.ts.dto.PaperDTO;
import com.ts.entity.Paper;
import com.ts.mapper.achievement.PaperMapper;
import com.ts.result.PageResult;
import com.ts.service.achievement.PaperService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.ObjectUtils;

import java.time.LocalDateTime;
import java.util.List;

/**
 * 论文服务实现类（简化逻辑）
 */
@Service
public class PaperServiceImpl implements PaperService {

    @Autowired
    private PaperMapper paperMapper;

    /**
     * 新增论文（简化DTO转实体，核心校验）
     */
    @Override
    public void save(PaperDTO dto) {
        // 核心参数校验
        if (dto == null || ObjectUtils.isEmpty(dto.getPaperName())) {
            throw new IllegalArgumentException("论文名称不能为空");
        }

        // 直接构建实体（简化转换，只映射必要字段）
        Paper paper = new Paper();
        paper.setPaperName(dto.getPaperName());
        paper.setAuthor(dto.getAuthor());
        paper.setPublishedJournal(dto.getPublishedJournal());
        paper.setPublishTime(dto.getPublishTime());
        paper.setAchievementType(dto.getAchievementType()); // 保留关键业务字段

        // 自动填充审计字段
        LocalDateTime now = LocalDateTime.now();
        paper.setCreateTime(now);
        paper.setUpdateTime(now);
        paper.setCreateBy(1L); // 模拟创建人
        paper.setUpdateBy(1L);

        paperMapper.save(paper);
    }

    /**
     * 删除论文（简化逻辑，只抛异常）
     */
    @Override
    public void deleteById(Long id) {
        if (id == null || id <= 0) {
            throw new IllegalArgumentException("ID不合法");
        }
        // 简单判断是否存在
        if (paperMapper.selectById(id) == null) {
            throw new RuntimeException("论文不存在");
        }
        paperMapper.deleteById(id);
    }

    /**
     * 更新论文（简化DTO处理）
     */
    @Override
    public void updateById(PaperDTO dto) {
        // 核心参数校验
        if (dto == null || dto.getId() == null || ObjectUtils.isEmpty(dto.getPaperName())) {
            throw new IllegalArgumentException("ID和论文名称不能为空");
        }

        // 查询已有数据
        Paper exist = paperMapper.selectById(dto.getId());
        if (exist == null) {
            throw new RuntimeException("论文不存在");
        }

        // 直接更新必要字段（保留创建信息）
        exist.setPaperName(dto.getPaperName());
        exist.setAuthor(dto.getAuthor());
        exist.setPublishedJournal(dto.getPublishedJournal());
        exist.setPublishTime(dto.getPublishTime());
        exist.setAchievementType(dto.getAchievementType()); // 更新关键业务字段
        // 其他需更新的字段按需添加

        // 更新审计信息
        exist.setUpdateTime(LocalDateTime.now());
        exist.setUpdateBy(1L); // 模拟修改人

        paperMapper.updateById(exist);
    }

    /**
     * 查询单个论文（保持简单）
     */
    @Override
    public Paper getById(Long id) {
        return id == null || id <= 0 ? null : paperMapper.selectById(id);
    }

    /**
     * 分页查询（简化参数处理）
     */
    @Override
    public PageResult pageQuery(PageDTO dto) {
        // 简化分页参数默认值
        int pageNum = dto.getPageNum() == null || dto.getPageNum() < 1 ? 1 : dto.getPageNum();
        int pageSize = dto.getPageSize() == null || dto.getPageSize() < 1 ? 10 : dto.getPageSize();
        int offset = (pageNum - 1) * pageSize;

        // 直接查数据和总数，封装返回
        List<Paper> list = paperMapper.selectByPage(offset, pageSize);
        Long total = paperMapper.selectTotalCount();
        return new PageResult(total, list);
    }
}